Rust ゼロコスト抽象化
ゼロコスト抽象化(zero-cost abstraction)
下記を参照した方がよい。
404 Not Foundになってしまった...
例えば以下のような関数を作ったとする。
code:memo.rs
fn print_hash<T: Hash>(t: &T) {
println!("The hash is {}", t.hash())
}
print_hash関数で、boolやi32の引数を渡す処理を書いたとすると、下記のような関数が生成される。
code:memo.rs
fn __print_hash_bool(&bool)
fn __print_hash_i32(&i32)
このようにすることを単相化というらしい。
具体的な関数が生成されるため、呼出側は生成された関数を直接呼び出すことになりオーバーヘッドがなくパフォーマンスが高い
traitを使った場合&implで静的ディスパッチになる
抽象化に対する追加のコスト
メモリの動的利用(動的ディスパッチ)
trait(トレイト)は、C言語では関数ポインタで実装するJavaのインターフェイス的なもの
traitで&dynをつけると動的ディスパッチ
確認用
Q. ゼロコスト抽象化
Q. 静的ディスパッチ
Q. 静的ディスパッチの何がいいか
Q. 動的ディスパッチ
Q. 動的ディスパッチだと何がいいか
Q. そもそもディスパッチとは
参考
関連
メモ